#ifndef __WIZ_BASE_TYPETRAITS_REMOVE_ALL_HPP__SHANHAOBO_19800429__
#define __WIZ_BASE_TYPETRAITS_REMOVE_ALL_HPP__SHANHAOBO_19800429__

namespace Wiz
{
    namespace TypeTraits
    {
        namespace Remove
        {
            /// General Case
            template<typename T>
            struct All
            {
                typedef T   tType;
            };

            /// Specialization for const or volatile
            /// remove const volatile
            template<typename T>
            struct All<T const>
            {
                typedef T   tType;
            };

            template<typename T>
            struct All<T volatile>
            {
                typedef T   tType;
            };

            template<typename T>
            struct All<T const volatile>
            {
                typedef T   tType;
            };

            /// Specialization for Reference
            /// tReference
            template<typename T>
            struct All<T&>
            {
                typedef T   tType;
            };

            template<typename T>
            struct All<T const &>
            {
                typedef T   tType;
            };

            /// Pointer
            template<typename T>
            struct All<T *>
            {
                typedef T   tType;
            };

            template<typename T>
            struct All<T **>
            {
                typedef T   tType;
            };

            template<typename T>
            struct All<T ***>
            {
                typedef T   tType;
            };

            template<typename T>
            struct All<T const *>
            {
                typedef T   tType;
            };

            template<typename T>
            struct All<T * const>
            {
                typedef T   tType;
            };

            template<typename T>
            struct All<T const * const>
            {
                typedef T   tType;
            };
        } /// end of namespace Remove
    } /// end of namespace TypeTraits
} /// end of namespace Wiz

#endif /*__WIZ_BASE_TYPETRAITS_REMOVE_ALL_HPP__SHANHAOBO_19800429__*/
